/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upn.sigemfi.vfi.beans;

import edu.upn.sigemfi.plt.be.Cuenta;
import edu.upn.sigemfi.plt.be.DetalleCuentaCliente;
import edu.upn.sigemfi.plt.be.DetalleCuentaClientePK;
import edu.upn.sigemfi.seg.be.PersonaJuridica;
import edu.upn.sigemfi.seg.be.PersonaNatural;
import edu.upn.sigemfi.vfi.bc.CuentaClienteDelegate;
import edu.upn.sigemfi.vfi.bc.CuentaDelegate;
import edu.upn.sigemfi.vfi.bc.DetalleTransaccionDelegate;
import edu.upn.sigemfi.vfi.bc.PersonaDelegate;
import edu.upn.sigemfi.vfi.bc.TipoTransaccionDelegate;
import edu.upn.sigemfi.vfi.bc.TranFinancieraDelegate;
import edu.upn.sigemfi.vfi.be.DetalleTransaccion;
import edu.upn.sigemfi.vfi.be.TipoTransaccion;
import edu.upn.sigemfi.vfi.be.TranFinanciera;
import java.util.List;
import javax.faces.model.SelectItem;

/**
 *
 * @author Programador
 */
public class TipoTransaccionController extends AbstractController{

    private TipoTransaccionDelegate delegado;
    private TipoTransaccion tipoTransaccion;
    private boolean validacionTarjeta=false;
    private boolean documento = true;
    private boolean verCuentas;
    private boolean validacion = false;



    private Cuenta cuenta;
    private Double monto;
    // Datos Validacion Ingreso Deposito
    private String tipoIngreso;


    private String tipoOperacion;
    //cuenta a buscar
    private Cuenta cuentaBuscada;
    private String nroCuenta;
    //datos cliente
    private CuentaClienteDelegate delegadoCuentaCliente;
    private DetalleCuentaCliente cuentaCliente;
    private DetalleCuentaClientePK detalleCuentaClientePK;
    private PersonaNatural personaNatural;
    private PersonaDelegate delegadoPersonaNatural;
    private PersonaJuridica personaJuridica;
    private PersonaDelegate delegadoPersonaJuridica;

    private String tipoDocumento;
    private String nroDocumento;
    private String titular;

    private TranFinanciera tranFinanciera;
    private Double montoDeposito;
    private DetalleTransaccion detalleTransaccion;
    private TranFinancieraDelegate delegadoTranFinanciera;
    private DetalleTransaccionDelegate delegadoDetalleTransaccion;

    private String nroTarjeta;
    private String clave;

    public TipoTransaccionController() {
        delegado = new TipoTransaccionDelegate();
    }

    public List<TipoTransaccion> getTipoTransacciones() {
        try {
            return delegado.listar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String nuevo() {
        tipoTransaccion = new TipoTransaccion();
        return "nuevo";
    }

    public String registrar() {
        try {
            delegado.crear(tipoTransaccion);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    public TipoTransaccion getTipoTransaccion() {
        return tipoTransaccion;
    }

    public SelectItem[] getTiposTransaccionSI() {
        SelectItem[] select = null;
        try {
            List<TipoTransaccion> tipos = delegado.listar();
            if (tipos != null) {
                select = new SelectItem[tipos.size()];
                int i = 0;
                //  select[i++] = new SelectItem(null, "Seleccione un tipo");
                for (TipoTransaccion tt : tipos) {
                    select[i++] = new SelectItem(tt, tt.getNombre());
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No existen tipos de transacciones ");
            }
        } catch (Exception e) {
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "Error al momento de consultar los datos");
            //mostrarError(e.getMessage());
        }
        return select;
    }

    //cuentas ahorro
    public SelectItem[] getTiposTransaccionCuentasAhorroSI() {
        SelectItem[] select = null;
        try {
            List<TipoTransaccion> tipos = delegado.listar();
           // if ( tipos.contains(("Deposito"))) {
  //              tipos.remove(tipos.indexOf("Deposito")) ;

                tipos.remove(new TipoTransaccion( Long.parseLong("3"),"Compra"));
                tipos.remove(new TipoTransaccion( Long.parseLong("4"),"Venta"));


         //   }

            if (tipos != null) {
                select = new SelectItem[tipos.size()];
                int i = 0;
                //  select[i++] = new SelectItem(null, "Seleccione un tipo");
               //;

                for (TipoTransaccion tt : tipos) {
                    //if (tt.getNombre().equals("Deposito")) {

                        select[i++] = new SelectItem(tt, tt.getNombre());

                   //}

                }
           } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No existen tipos de transacciones ");

                error("no ahi tipos de trnasacciones");
            }
        } catch (Exception e) {
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "Error al momento de consultar los datos");
            error("Error al momento de consultar los datos");
            //mostrarError(e.getMessage());
        }
        return select;
    }

    public void setTipoTransaccion(TipoTransaccion tipoTransaccion) {
        this.tipoTransaccion = tipoTransaccion;
    }

    public TipoTransaccion buscar(Long id) throws Exception {
        return delegado.buscar(id);
    }

    public String Validar() {
        //Codigo para validar
        if (tipoTransaccion.getNombre().compareTo("Deposito") == 0) {
            validacionTarjeta=false;
            return tipoTransaccion.getNombre();
        }
        verCuentas = true;

        return "listar";
    }

    public boolean isVerCuentas() {
        return verCuentas;
    }

    public void setVerCuentas(boolean verCuentas) {
        this.verCuentas = verCuentas;
    }

    public String RealizarOperacion() {

          try {

         //   if (buscarPorNroCuenta()) {
                //      mostrarMensaje("Bien","bien",FacesMessage.SEVERITY_FATAL);

                getdatosCliente();
                validacionTarjeta=false;
                verCuentas = true;

                  return getTipoOperacion();

           // } else {
             //   error("La Cuenta " + nroCuenta.toString() + " no es valida ");
           // }


        } catch (Exception e) {

            error(e.getMessage().toString());

        }
          return null;

    }

    /**
     * @return the validacion
     */
    public boolean isValidacion() {
        validacion = getTipoOperacion().equals("Deposito") ? false : true;
        return validacion;
    }

    /**
     * @param validacion the validacion to set
     */
    public void setValidacion(boolean validacion) {
        this.validacion = validacion;
    }

    /**
     * @return the tipoOperacion
     */
    public String getTipoOperacion() {
        return tipoOperacion;
    }

    /**
     * @param tipoOperacion the tipoOperacion to set
     */
    public void setTipoOperacion(String tipoOperacion) {
        this.tipoOperacion = tipoOperacion;
    }

    /**
     * @return the cuentaBuscada
     */
    public Cuenta getCuentaBuscada() {
        return cuentaBuscada;
    }

    /**
     * @param cuentaBuscada the cuentaBuscada to set
     */
    public void setCuentaBuscada(Cuenta cuentaBuscada) {
        this.cuentaBuscada = cuentaBuscada;
    }

    /**
     * @return the nroCuenta
     */
    public String getNroCuenta() {
        return nroCuenta;
    }

    /**
     * @param nroCuenta the nroCuenta to set
     */
    public void setNroCuenta(String nroCuenta) {
        this.nroCuenta = nroCuenta;
    }

    public Double getMontoDeposito() {
        return montoDeposito;
    }


    public PersonaNatural getPersonaNatural() {
        return personaNatural;
    }

    /**
     * @param personaNatural the personaNatural to set
     */
    public void setPersonaNatural(PersonaNatural personaNatural) {
        this.personaNatural = personaNatural;
    }

    /**
     * @return the tipoDocumento
     */
    public String getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(String tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public String getNroDocumento() {
        return nroDocumento;
    }

    public void setNroDocumento(String nroDocumento) {
        this.nroDocumento = nroDocumento;
    }

    /**
     * @return the personaJuridica
     */
    public PersonaJuridica getPersonaJuridica() {
        return personaJuridica;
    }

    /**
     * @param personaJuridica the personaJuridica to set
     */
    public void setPersonaJuridica(PersonaJuridica personaJuridica) {
        this.personaJuridica = personaJuridica;
    }

    /**
     * @return the titular
     */
    public String getTitular() {
        return titular;
    }

    /**
     * @param titular the titular to set
     */
    public void setTitular(String titular) {
        this.titular = titular;
    }

    /**
     * @return the tranFinanciera
     */
    public TranFinanciera getTranFinanciera() {
        return tranFinanciera;
    }

    /**
     * @param tranFinanciera the tranFinanciera to set
     */
    public void setTranFinanciera(TranFinanciera tranFinanciera) {
        this.tranFinanciera = tranFinanciera;
    }

    //DETALLES DE LA CUENTA Y EL CLIENTE
    public DetalleCuentaCliente getCuentaCliente() {
        return cuentaCliente;
    }

    public void setCuentaCliente(DetalleCuentaCliente cuentaCliente) {
        this.cuentaCliente = cuentaCliente;
    }

    //datos del cliente
    public void getdatosCliente() throws Exception {
        try {



            cuentaCliente = delegadoCuentaCliente.buscarPorCuenta(cuentaBuscada);


            if (cuentaCliente.getPersona().getXtipo().equals("PEN")) {

                tipoDocumento = "DNI";
                buscarPersona(cuentaCliente.getPersona().getIdPersona(), "PEN");
                nroDocumento = personaNatural.getDniPersona();
                titular = personaNatural.getApePaternoPersona() + " " + personaNatural.getApeMaternoPersona() + " " + personaNatural.getNombrePersona();


            } else {

                tipoDocumento = "RUC";
                buscarPersona(cuentaCliente.getPersona().getIdPersona(), "PEJ");
                nroDocumento = personaJuridica.getRuc();
                titular = personaJuridica.getRazonSocial();
            }




            //  delegado.buscarPorNroCuenta(nroCuenta);//local.find(codigo);


            //   return cuentaCliente;
        } catch (Exception e) {
            //    local = lookupCuentaFacade();

            error(e.getMessage().toString());

            //    throw new Exception("Buscar por nro de Cuenta. " + e.getMessage(), e);
            //   return null;
        }
    }

    //datos cliente persona
    public void buscarPersona(Long codigo, String tipo) {
        try {

            if (tipo.equals("PEN")) {
                setPersonaNatural(delegadoPersonaNatural.buscarPersonaNatural(codigo));

            } else {
                setPersonaJuridica(delegadoPersonaJuridica.buscarPersonaJuridica(codigo));
            }

        } catch (Exception e) {
            error(e.getMessage().toString());
        }
        // return null;

    }


    public String getNroTarjeta() {
        return nroTarjeta;
    }

    /**
     * @param nroTarjeta the nroTarjeta to set
     */
    public void setNroTarjeta(String nroTarjeta) {
        this.nroTarjeta = nroTarjeta;
    }

    public boolean isValidacionTarjeta() {
        return validacionTarjeta;
    }

    /**
     * @param validacionTarjeta the validacionTarjeta to set
     */
    public void setValidacionTarjeta(boolean validacionTarjeta) {
        this.validacionTarjeta = validacionTarjeta;
    }

    public String getClave() {
        return clave;
    }

    /**
     * @param clave the clave to set
     */
    public void setClave(String clave) {
        this.clave = clave;
    }


}
